package 多态.多态类型转换;

import 方法重写.Cat;

public class Test {
    public static void main(String[] args) {
        //测试多态对象调用父类成员
        Animal a=new Dog();
        System.out.println(a.name);//调用父类同名变量
        a.eat();//调用父类同名方法
        System.out.println(a.ID);//调用父类成员变量
        a.sleep();//调用父类成员方法
        System.out.println("------------------------");

        //测试父类对象调用子类成员
        Animal a1=new Animal();
        //System.out.println(a1.age);//调用子类方法，会报错

        System.out.println("------------------------");
        //测试多态对象调用子类成员
        Animal b=new Dog();
        b.eat();//调用子类同名方法
        System.out.println("------------------------");

        //测试多态对象调用子类特有成员
        //b.sleep_1();//调用子类特有方法，会报错

        //多态强制类型转换
        Animal c=new Dog();
        Dog d=(Dog) c;
        d.sleep_1();//多态强制类型转换，并调用子类特有成员
        System.out.println("------------------");

        /*
           1. "instanceof"用法：
                            对象名 instanceof 数据类型
           2. 用来判断前边的对象，是否是后边的数据类型
           3.代码示例：
                    if (c instanceof Dog){
                        Dog d=(Dog) c;
                        d.sleep_1();
                    }

         */

        if (c instanceof Dog){
            Dog f=(Dog) c;
            f.sleep_1();
        }
        System.out.println("---------------------");





    }
}
